package com.meida.module.bus.provider.service;

import com.meida.common.mybatis.base.service.IBaseService;
import com.meida.common.mybatis.model.ResultBody;
import com.meida.module.pay.client.entity.PayBalance;
import com.meida.module.pay.client.vo.PayRequest;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 余额表 接口
 *
 * @author flyme
 * @date 2019-12-16
 */
public interface BusPayBalanceService extends IBaseService<PayBalance> {

    /**
     * 根据用户类型和userId获取余额
     *
     * @param userId
     * @param userType
     * @return
     */
    PayBalance getByUserIdAndUserType(Long userId, String userType);

    /**
     * 添加余额和余额记录
     *
     * @param userId       用户Id
     * @param userType     用户类型
     * @param amount       金额
     * @param outTradeNo   第三方交易流水号
     * @param type         业务类型
     * @param status       业务状态  1审核中2成功 3失败
     * @param busId        业务Id  包括 订单Id,提现申请Id
     * @param title        标题，描述
     * @param body
     * @param sourceUserId 来源用户
     * @return
     */
    boolean addBalance(Long userId, String userType, BigDecimal amount, String outTradeNo, Integer type, Integer status, Long busId, String title, String body, Long sourceUserId);


    /**
     * 减少余额和添加余额记录
     *
     * @param payRequest
     * @return
     */
    boolean subtractBalance(PayRequest payRequest);

    /**
     * 创建用户账户
     *
     * @param userId
     * @return
     */
    PayBalance addUserBalance(Long userId);

    /**
     * 设置支付密码
     *
     * @return
     */
    ResultBody setPayPwd(String paypwd, String smsCode);

    /**
     * 查询用户账户
     *
     * @param userId
     * @return
     */
    PayBalance getByUserId(Long userId);


    /**
     * 设置账户余额
     *
     * @param userId
     * @return
     */
    Boolean addBindAmount(Long userId, Long sourceUserId, BigDecimal amount);

    /**
     * 设置账户绑定金余额
     *
     * @param userId
     * @return
     */
    Boolean addBindAmount(Long userId, Long sourceUserId, BigDecimal amount, Integer logType, String title, String body);

    /**
     * 绑定提现账号
     *
     * @param bindCashType
     * @param cashAccount
     * @return
     */
    ResultBody bindCashAccount(Integer bindCashType, String cashAccount);

    /**
     * 支付宝
     * 得到 auth_code 后换取 access_token 和 userId
     *
     * @return
     */
    ResultBody getAliUserInfoByAuthCode(String authCode, Long payId);

    /**
     * description: 申请提现
     * date: 2022年-06月-27日 11:07
     * author: ldd
     *
     * @param userId
     * @param money
     * @param logType
     * @return com.meida.common.mybatis.model.ResultBody
     */
    ResultBody withdrawals(Long userId, BigDecimal money, Integer logType);

    /**
     * 提现审批
     * description:
     * date: 2022年-06月-27日 11:41
     * author: ldd
     *
     * @param balanceLogId
     * @param status
     * @return
     */
    ResultBody withdrawalsApproval(Long balanceLogId, Integer status);

    /**
     * 提现列表
     * description:
     * date: 2022年-06月-30日 12:09
     * author: ldd
     *
     * @param
     * @return
     */
    ResultBody withdrawalsPage(Map map);
}
